package com.uade.tp.persistencia;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import com.uade.tp.negocio.Comida;
import com.uade.tp.negocio.view.ComidaView;


public class AdministrarPersistenciaComida 
{
	private static AdministrarPersistenciaComida pool;
	
	
	private AdministrarPersistenciaComida()
	{
		
	}
	public static AdministrarPersistenciaComida getInstancia()
	{
		if (pool== null)
			pool =new AdministrarPersistenciaComida();
		return pool;
	}
	
	public void insert(Comida c)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "INSERT INTO  Comida (nombre, rentabilidad, seccion,receta,estado) VALUES (?,?,?,?,?)" ;
			PreparedStatement ps = null;
 			ps = con.prepareStatement(senten);
			ps.setString(1,c.getNombre());
			ps.setFloat(2,c.getPrecioVenta());
			ps.setString(3,c.getSeccion().getNombre());
			ps.setString(4,c.getReceta().getNombre());
			ps.setString(5, c.isEstado()?"S":"N");
					
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar Comida: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Comida: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      
	}
	
	public void update(Comida c)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "UPDATE Comida set rentabilidad = ? ,seccion= ?,receta= ? where nombre = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setFloat(1,c.getPrecioVenta());
			ps.setString(2,c.getSeccion().getNombre());
			ps.setString(3,c.getReceta().getNombre());
			ps.setString(4,c.getNombre());
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Modificar Comida: " + e.getMessage());
				System.out.println("Stack Trace al Modificar Comida: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      
		
	}
	public void delete (Comida c)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "update Comida set estado = 'N' where nombre= ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,c.getNombre());
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Comida: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Comida: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	}
	
	public Comida buscarComida(String nombre)
	{
		Comida c = null;
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia select en tabla destino
			String senten = "SELECT nombre,rentabilidad,seccion,receta from Comida where nombre = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,nombre);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{
				c = new Comida();
				c.setNombre(result.getString("nombre"));
				c.setRentabilidad(result.getFloat("rentabilidad"));
				c.setSeccion(AdministradorPersistenciaSeccion.getInstancia().
						buscarSeccion(result.getString("seccion")));
				c.setReceta(AdministradorPersistenciaReceta.getInstancia().
						buscarReceta(result.getString("receta")));
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return c;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Comida: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Comida: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      return c;
	}
	
	public Vector<ComidaView> obtenerComidasView()
	{
		Vector<ComidaView> comidas=new Vector<ComidaView>();
		
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "SELECT nombre,rentabilidad,seccion,receta,estado from comida where estado = 'S'" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{
				Comida c = new Comida();
				c.setNombre(result.getString("nombre"));
				c.setSeccion(AdministradorPersistenciaSeccion.getInstancia().buscarSeccion(result.getString("seccion")));
				c.setReceta(AdministradorPersistenciaReceta.getInstancia().buscarReceta(result.getString("receta")));
				c.setRentabilidad(result.getFloat("rentabilidad"));
				comidas.add(c.getView());
				
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return comidas;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Producto: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Producto: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      return comidas;
	}
	
}
